import {
  getAll,
  getSongPlay
} from '../../utils/http'
const audio = getApp().audio
Page({
  prevSongId: null, // 上一次播放的歌曲id
  nowSongId: null, // 本次播放的歌曲id
  async onLoad() {
    wx.showLoading({
      title: '',
      mask: true
    })
    let res = await getAll()
    wx.hideLoading()
    this.setData(res.data)
  },
  onShow() {
    // 监听背景音频播放事件
    audio.onPlay(() => {
      console.log('音频播放')
      let index = this.data.lastSong.findIndex(item => item.songId == this.nowSongId)
      if (index > -1) {
        this.setData({
          [`lastSong[${index}].status`]: "playing"
        })
      }
    })
    // 监听用户在系统音乐播放面板点击上一曲事件的监听函数
    audio.onPrev(() => {
      console.log('用户点击了上一首')
    })
    // 监听用户在系统音乐播放面板点击下一曲事件
    audio.onNext(() => {
      console.log('用户点击了下一首')
    })
    // 监听背景音频自然播放结束事件
    audio.onEnded(() => {
      console.log('音频自然播放结束')
      let index = this.data.lastSong.findIndex(item => item.songId == this.nowSongId)
      if (index > -1) {
        this.setData({
          [`lastSong[${index}].status`]: "stop"
        })
      }
    })
    // 监听背景音频暂停事件
    audio.onPause(() => {
      console.log('音频暂停')
      let index = this.data.lastSong.findIndex(item => item.songId == this.nowSongId)
      if (index > -1) {
        this.setData({
          [`lastSong[${index}].status`]: "pauseing"
        })
      }
    })
    // 监听背景音频停止事件
    audio.onStop(() => {
      console.log('背景音频停止')
      let index = this.data.lastSong.findIndex(item => item.songId == this.prevSongId)
      if (index > -1) {
        this.setData({
          [`lastSong[${index}].status`]: "stop"
        })
      }
    })
  },
  // 获取指定歌曲信息
  async getSongData(songId) {
    wx.showLoading({
      title: '',
      mask: true
    })
    let res = await getSongPlay({
      songId
    })
    wx.hideLoading()
    return res
  },
  // 加载lastSong歌曲数据并播放
  async getLastSongData(songId) {
    let res = await this.getSongData(songId)
    if (res.code !== 200) {
      return wx.showToast({
        title: res.msg,
        icon: 'none'
      })
    }
    audio.stop()
    audio.src = res.data.url
    audio.title = res.data.title.split(" - ")[1]
    audio.singer = res.data.title.split(" - ")[0]
    audio.coverImgUrl = res.data.pic
    audio.play()
    let index = this.data.lastSong.findIndex(item => item.songId == this.nowSongId)
    this.setData({
      [`lastSong[${index}].songData`]: res.data
    })
  },
  // 点击播放按钮
  playAudio(e) {
    this.nowSongId = e.currentTarget.dataset.id
    this.startPlayAudio()
  },
  // 播放指定歌曲
  async startPlayAudio() {
    // 筛选出匹配songId的数据
    let item = this.data.lastSong.filter(item => item.songId == this.nowSongId)[0]
    // 判断上一次播放的歌曲与本次是否相同。
    // 1、相同：继续播放（前一次没放完）/ 开始播放（前一次没放过）/ 重新播放（前一次放过了）
    // 2、不同：结束上次的播放状态，并设置新的播放记录
    if (this.prevSongId == this.nowSongId) {
      console.log("前后是同一首歌")
      // 前一次放过了，状态stop，且有歌词
      if (item.status && item.status == "stop" && item.songData) {
        console.log("当前状态stop且有歌词")
        audio.src = item.songData.url
        audio.title = item.title
        audio.singer = item.singer
        audio.coverImgUrl = item.songData.pic
        audio.play()
      }
      // 前一次没放完，状态pauseing，继续播放
      else if (item.status && item.status == "pauseing") {
        console.log("当前状态pauseing，继续播放")
        audio.play()
      }
      // 当前没有状态（意外缺失），有歌词就播放
      else if (item.songData) {
        console.log("当前没有状态（意外缺失），有歌词就播放")
        audio.stop()
        audio.src = item.songData.url
        audio.title = item.title
        audio.singer = item.singer
        audio.coverImgUrl = item.songData.pic
        audio.play()
      } else {
        // 一穷二白（清理过微信数据），获取数据
        console.log("一穷二白（清理过微信数据），获取数据")
        await this.getLastSongData(item.songId)
      }
    } else { // 前后不是同一首歌，先停止前一首播放
      if (item.songData) {
        audio.stop()
        console.log("前后不是同一首歌，但有歌词，直接播放")
        audio.src = item.songData.url
        audio.title = item.title
        audio.singer = item.singer
        audio.coverImgUrl = item.songData.pic
        audio.play()
      } else {
        console.log("前后不是同一首歌，且无歌词，先获取再播放")
        await this.getLastSongData(item.songId)
      }
    }
    // 重置上次播放id为本次的，之所以用定时，是因为音频组件在监听，它会慢一点
    setTimeout(() => {
      this.prevSongId = this.nowSongId
    }, 100)
  },
  // 暂停
  pauseAudio(e) {
    audio.pause()
  },
  toHotSong() {
    wx.switchTab({
      url: '/pages/hotSong/index',
    })
  },
  toHotSongList(e) {
    let {
      id,
      title
    } = e.currentTarget.dataset
    wx.navigateTo({
      url: `/pages/music/index?type=song&id=${id}&navtitle=${title}`,
    })
  },
  toSinger() {
    wx.navigateTo({
      url: '/pages/singer/index',
    })
  },
  toSingerSong(e) {
    let {
      id,
      singer
    } = e.currentTarget.dataset
    wx.navigateTo({
      url: `/pages/music/index?type=singer&id=${id}&navtitle=${singer}`,
    })
  },
  toSearch() {
    wx.navigateTo({
      url: '/pages/search/index',
    })
  },
  toLastSong() {
    wx.navigateTo({
      url: "/pages/music/index?type=bang&id=new&navtitle=每日最新",
    })
  },
})